package top.korori.sv.service;

import com.baomidou.mybatisplus.extension.service.IService;
import top.korori.common.model.PageData;
import top.korori.oss.entity.res.CosTmpKeyVo;
import top.korori.sv.entity.SvWork;
import top.korori.sv.entity.bo.*;
import top.korori.sv.entity.vo.SvUserWorkVo;
import top.korori.sv.entity.vo.SvWorkVo;
import top.korori.sv.entity.vo.SysSvWorkVo;

/**
 * 作品 服务类
 *
 * @author korori
 */
public interface SvWorkService extends IService<SvWork> {

    /**
     * @param svWorkAddBo 作品参数
     * @return 作品信息
     */
    SvUserWorkVo push(SvWorkAddBo svWorkAddBo);

    /**
     * 条件分页查询作品列表
     *
     * @param svHomeWorkGetBo 查询参数
     * @return 作品信息
     */
    PageData<SvUserWorkVo> getHoneWorks(SvHomeWorkGetBo svHomeWorkGetBo);

    /**
     * 删除当前用户自己的作品
     *
     * @param workId 作品id
     */
    void delMyWork(Long workId);

    /**
     * 获取用我的作品列表
     *
     * @param svWorkGetBo 查询参数
     * @return 分页作品列表
     */
    PageData<SvWorkVo> getUserHomeList(SvWorkGetBo svWorkGetBo);

    /**
     * 获取用我的作品列表
     *
     * @param svWorkGetReq 查询参数
     * @return 分页作品列表
     */
    PageData<SvWorkVo> getUserHomeList(SvMyWorkGetBo svWorkGetReq);

    /**
     * 点赞作品
     *
     * @param workId 作品id
     * @param userId 用户id
     */
    void like(Long workId, Long userId);

    /**
     * 收藏作品
     *
     * @param workId 作品id
     * @param userId 用户id
     */
    void star(Long workId, Long userId);

    /**
     * 设置作品权限
     *
     * @param workPerSetBo 设置参数
     */
    void perSet(WorkPerSetBo workPerSetBo);

    /**
     * 获取上传作品文件临时密钥
     *
     * @return 临时密钥对象
     */
    CosTmpKeyVo getUpTmpKey(String fileName);

    PageData<SysSvWorkVo> getSysList(SysSvWorkBo svWorkBo);

    /**
     * 浏览作品
     *
     * @param userId 用户id
     * @param workId 作品id
     */
    void browseWork(Long userId, Long workId);

}
